#Boa:Frame:Frame1

import wx
import wx.grid
import wx.richtext
import wx.stc
import consultasBD
import utiles
from decimal import Decimal
import sincronizar_tabla

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1BUTTON10, wxID_FRAME1BUTTON2, 
 wxID_FRAME1BUTTON3, wxID_FRAME1BUTTON4, wxID_FRAME1BUTTON5, 
 wxID_FRAME1BUTTON6, wxID_FRAME1BUTTON7, wxID_FRAME1BUTTON8, 
 wxID_FRAME1BUTTON9, wxID_FRAME1CHECKBOX1, wxID_FRAME1CHECKBOX2, 
 wxID_FRAME1CHECKBOX3, wxID_FRAME1CHECKBOX4, wxID_FRAME1GRID1, 
 wxID_FRAME1LISTBOX1, wxID_FRAME1PANEL1, wxID_FRAME1RADIOBUTTON1, 
 wxID_FRAME1RADIOBUTTON2, wxID_FRAME1RADIOBUTTON3, wxID_FRAME1STATICTEXT1, 
 wxID_FRAME1STATICTEXT2, wxID_FRAME1STATICTEXT3, wxID_FRAME1STATICTEXT4, 
 wxID_FRAME1TEXTCTRL1, wxID_FRAME1TEXTCTRL2, 
] = [wx.NewId() for _init_ctrls in range(27)]

class Frame1(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_FRAME1, name='', parent=prnt,
              pos=wx.Point(46, 14), size=wx.Size(1130, 604),
              style=wx.DEFAULT_FRAME_STYLE,
              title='Procesar Inventarios Masivos')
        self.SetClientSize(wx.Size(1122, 577))

        self.panel1 = wx.Panel(id=wxID_FRAME1PANEL1, name='panel1', parent=self,
              pos=wx.Point(0, 0), size=wx.Size(1122, 577),
              style=wx.TAB_TRAVERSAL)

        self.staticText1 = wx.StaticText(id=wxID_FRAME1STATICTEXT1,
              label='Nombre del archivo', name='staticText1',
              parent=self.panel1, pos=wx.Point(8, 48), size=wx.Size(92, 13),
              style=0)

        self.staticText2 = wx.StaticText(id=wxID_FRAME1STATICTEXT2,
              label='Directorio', name='staticText2', parent=self.panel1,
              pos=wx.Point(8, 0), size=wx.Size(46, 13), style=0)

        self.textCtrl2 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL2, name='textCtrl2',
              parent=self.panel1, pos=wx.Point(8, 16), size=wx.Size(100, 21),
              style=0, value='c:\\matrisamor.doc\\')

        self.button1 = wx.Button(id=wxID_FRAME1BUTTON1, label='Buscar',
              name='button1', parent=self.panel1, pos=wx.Point(112, 16),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_FRAME1BUTTON1)

        self.listBox1 = wx.ListBox(choices=[], id=wxID_FRAME1LISTBOX1,
              name='listBox1', parent=self.panel1, pos=wx.Point(8, 64),
              size=wx.Size(344, 392), style=0)
        self.listBox1.Bind(wx.EVT_LISTBOX_DCLICK, self.OnDobleClick,
              id=wxID_FRAME1LISTBOX1)

        self.button2 = wx.Button(id=wxID_FRAME1BUTTON2, label='Cargar Archivo',
              name='button2', parent=self.panel1, pos=wx.Point(232, 520),
              size=wx.Size(112, 23), style=0)
        self.button2.Enable(False)
        self.button2.Bind(wx.EVT_BUTTON, self.OnCargar, id=wxID_FRAME1BUTTON2)

        self.radioButton1 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON1,
              label='PTC', name='radioButton1', parent=self.panel1,
              pos=wx.Point(8, 518), size=wx.Size(40, 13), style=0)
        self.radioButton1.SetValue(False)
        self.radioButton1.Enable(False)

        self.radioButton2 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON2,
              label='Cod. Sussan', name='radioButton2', parent=self.panel1,
              pos=wx.Point(56, 518), size=wx.Size(81, 13), style=0)
        self.radioButton2.SetValue(True)
        self.radioButton2.Enable(False)

        self.radioButton3 = wx.RadioButton(id=wxID_FRAME1RADIOBUTTON3,
              label='Proveedor', name='radioButton3', parent=self.panel1,
              pos=wx.Point(144, 518), size=wx.Size(72, 13), style=0)
        self.radioButton3.SetValue(True)
        self.radioButton3.Enable(False)

        self.button5 = wx.Button(id=wxID_FRAME1BUTTON5, label='Imprimir',
              name='button5', parent=self.panel1, pos=wx.Point(832, 520),
              size=wx.Size(75, 23), style=0)
        self.button5.Enable(False)
        self.button5.Bind(wx.EVT_BUTTON, self.OnImprimir, id=wxID_FRAME1BUTTON5)

        self.button4 = wx.Button(id=wxID_FRAME1BUTTON4, label='Analizar',
              name='button4', parent=self.panel1, pos=wx.Point(356, 520),
              size=wx.Size(75, 23), style=0)
        self.button4.Enable(False)
        self.button4.Bind(wx.EVT_BUTTON, self.OnProcesar, id=wxID_FRAME1BUTTON4)

        self.button8 = wx.Button(id=wxID_FRAME1BUTTON8,
              label='Exportar Diferencias', name='button8', parent=self.panel1,
              pos=wx.Point(448, 520), size=wx.Size(112, 23), style=0)
        self.button8.Enable(False)
        self.button8.Bind(wx.EVT_BUTTON, self.OnExportar, id=wxID_FRAME1BUTTON8)

        self.button7 = wx.Button(id=wxID_FRAME1BUTTON7,
              label='Actualizar STOCK', name='button7', parent=self.panel1,
              pos=wx.Point(576, 520), size=wx.Size(112, 23), style=0)
        self.button7.Enable(False)
        self.button7.Bind(wx.EVT_BUTTON, self.OnActualizarSTOCK,
              id=wxID_FRAME1BUTTON7)

        self.button3 = wx.Button(id=wxID_FRAME1BUTTON3, label='Limpiar',
              name='button3', parent=self.panel1, pos=wx.Point(956, 520),
              size=wx.Size(75, 23), style=0)
        self.button3.Enable(False)
        self.button3.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_FRAME1BUTTON3)

        self.button6 = wx.Button(id=wxID_FRAME1BUTTON6, label='Salir',
              name='button6', parent=self.panel1, pos=wx.Point(1036, 520),
              size=wx.Size(75, 23), style=0)
        self.button6.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_FRAME1BUTTON6)

        self.grid1 = wx.grid.Grid(id=wxID_FRAME1GRID1, name='grid1',
              parent=self.panel1, pos=wx.Point(360, 16), size=wx.Size(752, 496),
              style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_FRAME1TEXTCTRL1, name='textCtrl1',
              parent=self.panel1, pos=wx.Point(8, 480), size=wx.Size(344, 21),
              style=0, value='')
        self.textCtrl1.SetEditable(False)

        self.staticText3 = wx.StaticText(id=wxID_FRAME1STATICTEXT3,
              label='Ordenado por', name='staticText3', parent=self.panel1,
              pos=wx.Point(8, 504), size=wx.Size(67, 13), style=0)

        self.checkBox1 = wx.CheckBox(id=wxID_FRAME1CHECKBOX1,
              label='La fuente de los datos es el Recolector de Datos',
              name='checkBox1', parent=self.panel1, pos=wx.Point(8, 464),
              size=wx.Size(256, 13), style=0)
        self.checkBox1.SetValue(False)

        self.checkBox2 = wx.CheckBox(id=wxID_FRAME1CHECKBOX2, label='solo DIF',
              name='checkBox2', parent=self.panel1, pos=wx.Point(832, 544),
              size=wx.Size(64, 13), style=0)
        self.checkBox2.SetValue(True)
        self.checkBox2.Enable(False)

        self.checkBox3 = wx.CheckBox(id=wxID_FRAME1CHECKBOX3, label='incluir $',
              name='checkBox3', parent=self.panel1, pos=wx.Point(832, 560),
              size=wx.Size(64, 13), style=0)
        self.checkBox3.SetValue(False)
        self.checkBox3.Enable(False)

        self.button9 = wx.Button(id=wxID_FRAME1BUTTON9,
              label='Comparar con Stock', name='button9', parent=self.panel1,
              pos=wx.Point(240, 16), size=wx.Size(112, 23), style=0)
        self.button9.Enable(False)
        self.button9.Show(False)
        self.button9.Bind(wx.EVT_BUTTON, self.OnCompararStock,
              id=wxID_FRAME1BUTTON9)

        self.button10 = wx.Button(id=wxID_FRAME1BUTTON10,
              label='Lo que no se conto', name='button10', parent=self.panel1,
              pos=wx.Point(704, 520), size=wx.Size(112, 23), style=0)
        self.button10.Enable(False)
        self.button10.Bind(wx.EVT_BUTTON, self.OnLoQueNoSeConto,
              id=wxID_FRAME1BUTTON10)

        self.checkBox4 = wx.CheckBox(id=wxID_FRAME1CHECKBOX4,
              label='Escribir directo en BD', name='checkBox4',
              parent=self.panel1, pos=wx.Point(576, 544), size=wx.Size(152, 13),
              style=0)
        self.checkBox4.SetValue(False)
        self.checkBox4.Enable(False)

        self.staticText4 = wx.StaticText(id=wxID_FRAME1STATICTEXT4,
              label='(tambien sincroniza)', name='staticText4',
              parent=self.panel1, pos=wx.Point(592, 560), size=wx.Size(96, 13),
              style=0)
        self.staticText4.Enable(False)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.procesar = False
        self.crearGrillas()

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def crearGrillas(self):
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant,Stock,Dif,Pesos
        #0   1         2           3     4     5         6    7     8   9
        columnas = ['P.T.C','CodSussan','Descripcion','Talle','Color','Proveedor','Cant','Stk','Dif','$']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.ajustarAnchoColumnas()
        self.grid1.Refresh()

    def OnBuscar(self, event):
        self.listBox1.Clear()
        import os
        ficheros = os.listdir(self.textCtrl2.GetLabel())
        for item in ficheros:
            self.listBox1.Append(item)

    def OnSalir(self, event):
        self.Close()
        
    def OnSetFocusTexto(self, event):
        self.button2.SetFocus()

    def OnDobleClick(self, event):
        indice = self.listBox1.GetSelection()
        directorio = self.textCtrl2.GetLabel()
        archivo = self.listBox1.Items[indice]
        myArchivo = directorio+archivo
        self.textCtrl1.SetLabel(myArchivo)
        self.button1.Enable(False)
        self.button2.Enable(True)
        self.button3.Enable(True)
        self.button4.Enable(False)
        self.button5.Enable(False)
        self.checkBox2.Enable(False)
        self.checkBox3.Enable(False)
        self.button9.Enable(False)
        self.button10.Enable(False)
        self.radioButton1.Enable(True)
        self.radioButton2.Enable(True)
        self.radioButton3.Enable(True)
        self.radioButton3.SetValue(True)

    def OnLimpiar(self, event):
        self.textCtrl1.SetLabel("")
        self.listBox1.Clear()
        self.grid1.ClearGrid()
        for fil in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        self.procesar = False
        self.radioButton1.Enable(True)
        self.radioButton2.Enable(True)
        self.radioButton3.Enable(True)
        self.button1.Enable(True)
        self.button2.Enable(True)
        self.button4.Enable(False)
        self.button9.Enable(False)
        self.button10.Enable(False)
        self.button8.Enable(False)
        self.button5.Enable(False)
        self.checkBox2.Enable(False)
        self.checkBox3.Enable(False)
        self.button7.Enable(False)
        self.checkBox4.Enable(False)
        self.staticText4.Enable(False)
        self.button1.SetFocus()

    def buscarPTCenGrilla(self,ptc):
        for x in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(x,0)==ptc:return x
        return -1

    def buscarDatosProducto(self,ptc):
        r01 = "SELECT p2.codsussan,p2.descri,p2.estacion,p2.anio,p2.grupo, \n"
        r02 = "       p5.nombregrupo,p1.color,p3.nombre AS nombrecolor, \n"
        r03 = "       p1.talle,p4.idproveedor,p4.nombre AS nombreproveedor \n"
        r04 = "FROM (SELECT codsussan,talle,color FROM producto_talle_color WHERE id='"+ptc+"') AS p1, \n"
        r05 = "  productos AS p2, \n"
        r06 = "  colores AS p3, \n"
        r07 = "  proveedor AS p4, \n"
        r08 = "  grupos AS p5 \n"
        r09 = "WHERE p1.codsussan=p2.codsussan \n"
        r10 = "      AND p2.grupo=p5.idgrupo \n"
        r11 = "      AND p1.color=p3.idcolor \n"
        r12 = "      AND p2.proveedor=p4.idproveedor "
        sql = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11+r12
        resultado = consultasBD.ordenCrudaDict(sql)
        if len(resultado)==0 or resultado==None or resultado==():
            return {"codsussan":"","descri":"","estacion":"","anio":"",\
                    "grupo":"","nombregrupo":"","color":"","nombrecolor":"",\
                    "talle":"","idproveedor":"","nombreproveedor":""}
        return resultado[0]
      
    def OnCargar(self, event):
        if self.textCtrl1.GetLabel()=="":
            self.button1.SetFocus()
            return
        myArchivo = self.textCtrl1.GetLabel()
        f = open(myArchivo)
        lista = f.readlines()
        f.close()
        if self.checkBox1.GetValue():
            #si la fuente de datos es el recolector, 
            #debe procesarse el archivo previamente
            aux = lista[0].split("\r")
            lista = []
            for item in aux:
                if item=="":continue
                lista.append(item+" ")
        
        renglon = -1
        marca = False

        self.button2.Enable(False)
        self.button3.Enable(False)
        self.button4.Enable(False)
        self.button5.Enable(False)
        self.checkBox2.Enable(False)
        self.checkBox3.Enable(False)
        self.button9.Enable(False)
        self.button10.Enable(False)
        self.button6.Enable(False)
        self.radioButton1.Enable(False)
        self.radioButton2.Enable(False)
        self.radioButton3.Enable(False)
        
        sql = "DROP TABLE IF EXISTS inventariosmasivos"
        consultasBD.ordenCruda(sql)
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant,Stock,Dif
        #0   1         2           3     4     5         6    7     8
        r1 = "CREATE TABLE inventariosmasivos (`id` INT(5) NOT NULL AUTO_INCREMENT,"
        r2 = "`ptc` VARCHAR(15) NOT NULL, "
        r3 = "`codsussan` VARCHAR(18) NOT NULL, "
        r4 = "`descripcion` VARCHAR(20) NOT NULL, "
        r5 = "`talle` VARCHAR(5) NOT NULL, "
        r6 = "`color` VARCHAR(20) NOT NULL, "
        r7 = "`proveedor` VARCHAR(15) NOT NULL, "
        r8 = "`cantidad` VARCHAR(5) NOT NULL, "
        r9 = "PRIMARY KEY (`id`)) ENGINE = INNODB"
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9
        consultasBD.ordenCruda(sql)

        diccionario = {}
        for ptc in lista:
            nuevo = False
            myPTC = ptc[:-1]
            try:
                aux = diccionario[myPTC]
                nuevo = False
            except:
                nuevo = True
            if nuevo:
                cantidad = 1
                diccionario[myPTC] = str(cantidad)
            else:
                cantidad = int(diccionario[myPTC])+1
                diccionario[myPTC] = str(cantidad)
        try:
            consultasBD.begin()
            for ptc in diccionario:
                datos = self.buscarDatosProducto(ptc)
                datos["cantidad"] = diccionario[ptc]
                #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant,Stock,Dif
                #0   1         2           3     4     5         6    7     8
                codsussan = datos["codsussan"]
                descripcion = datos["descri"][:20]
                talle = datos["talle"]
                color = datos["color"]+"/"+datos["nombrecolor"]
                proveedor = datos["nombreproveedor"][:15]
                cantidad = datos["cantidad"]
                
                r1 = "INSERT INTO inventariosmasivos(ptc,codsussan,descripcion,"
                r2 = "talle,color,proveedor,cantidad) "
                r3 = "VALUES ('%s','%s','%s'," % (ptc,codsussan,descripcion)
                r4 = "'%s','%s','%s','%s')" % (talle,color,proveedor,cantidad)
                sql = r1+r2+r3+r4
                consultasBD.executaSinCommit(None, sql)

            consultasBD.commit()

        except:
            utiles.mensaje(None,"Error al grabar")

        r1 = "SELECT * FROM inventariosmasivos WHERE 1 "
        if self.radioButton1.GetValue(): # PTC
            r2 = "ORDER BY ptc,codsussan,proveedor "
        elif self.radioButton2.GetValue(): # Cod Sussan
            r2 = "ORDER BY codsussan,ptc,proveedor "
        else: # Proveedor
            r2 = "ORDER BY proveedor,codsussan,ptc "
        sql = r1+r2
        resultados = consultasBD.ordenCrudaDict(sql)
        for fil,datos in enumerate(resultados):
            #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant,Stock,Dif
            #0   1         2           3     4     5         6    7     8
            ptc = datos["ptc"]
            codsussan = datos["codsussan"]
            descripcion = datos["descripcion"]
            talle = datos["talle"]
            color = datos["color"]
            proveedor = datos["proveedor"]
            cantidad = datos["cantidad"]

            self.grid1.SetCellValue(fil,0,ptc)
            self.grid1.SetCellValue(fil,1,codsussan)
            self.grid1.SetCellValue(fil,2,descripcion)
            self.grid1.SetCellValue(fil,3,talle)
            self.grid1.SetCellValue(fil,4,color)
            self.grid1.SetCellValue(fil,5,proveedor)
            self.grid1.SetCellValue(fil,6,cantidad)

            self.grid1.SetCellBackgroundColour(fil,0,GRIS)
            self.grid1.SetCellBackgroundColour(fil,6,GRIS)

            self.grid1.SetCellAlignment(fil, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.AppendRows()
            
        self.ajustarAnchoColumnas()

        self.button3.Enable(True)
        self.button4.Enable(True)
        self.button5.Enable(False)
        self.checkBox2.Enable(False)
        self.checkBox3.Enable(False)
        self.button9.Enable(True)
        self.button10.Enable(True)
        self.button6.Enable(True)
            
    def OnImprimir(self, event):
        print "Imprimir"
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant
        #0   1         2           3     4     5         6

        if self.checkBox2.GetValue():
            totalFilas = 0
            for fila in xrange(self.grid1.GetNumberRows()):
                if self.grid1.GetCellValue(fila,8)!="":
                    totalFilas+= 1
        else:
            totalFilas = self.grid1.GetNumberRows()-1

        f=open("c:\\matrisamor.doc\\reporte-InventariosMasivos.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 50
        totalPaginas = int(totalFilas) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()

            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">'
            a+= 'SUSSAN BOUTIQUE<br>Inventarios Masivo'
            a+= '<br></td>\n<td valign="center" align="left" width="34%">'
            a+= '<br>'
            a+= '</td>\n'
            a+= '<td valign="center" align="right" width="33%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant
        #0   1         2           3     4     5         6
            a = '<hr>'

            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>PTC</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Cod.<br>Sussan</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Talle</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Color</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Proveedor</font></td> \n'
            if self.procesar:
                a+= '<td valign="top" align="right"><font size='+tama+'>Stk<br>(sistema)</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Cant.</font></td> \n'
            if self.procesar:
                a+= '<td valign="top" align="right"><font size='+tama+'>Dif</font></td> \n'
                if self.checkBox3.GetValue():
                    a+= '<td valign="top" align="right"><font size='+tama+'>$</font></td> \n'
            a+= '</tr> \n'
#            a+= '</table>\n'
            a+= '<tr>\n'
            if not self.procesar:
                if self.checkBox3.GetValue():
                    a+= '<td colspan="7"><hr></td>\n'
                else:
                    a+= '<td colspan="8"><hr></td>\n'
            else:
                a+= '<td colspan="11"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        renglon = 0
        totalProductos = 0
        totalStock = 0
        totalImporte = Decimal("0.00")
        for i in xrange(self.grid1.GetNumberRows()-1):
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant,Stock,Dif,Pesos
        #0   1         2           3     4     5         6    7     8   9
            if self.checkBox2.GetValue():
                if self.grid1.GetCellValue(i,8)=="":
                    continue
            orden = str(i+1)
            ptc = self.grid1.GetCellValue(i,0)
            codsussan = self.grid1.GetCellValue(i,1)
            descripcion = self.grid1.GetCellValue(i,2)
            talle = self.grid1.GetCellValue(i,3)
            color = self.grid1.GetCellValue(i,4)
            proveedor = self.grid1.GetCellValue(i,5)
            cantidad = self.grid1.GetCellValue(i,6)
            totalProductos+= int(cantidad)
            if self.procesar:
                stock = self.grid1.GetCellValue(i,7)
                dif = self.grid1.GetCellValue(i,8)
                precio = self.grid1.GetCellValue(i,9)
                totalStock+= int(stock)
                if precio!="":
                    totalImporte+= Decimal(precio)
            
            tama = '"1"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+orden+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'><strong>'+ptc+'</strong></font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+codsussan+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+talle+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+color+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+proveedor+'</font></td> \n'
            if self.procesar:
                cadena+= '<td valign="top" align="right"><font size='+tama+'>'+stock+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+cantidad+'</font></td> \n'
            if self.procesar:
                cadena+= '<td valign="top" align="right"><font size='+tama+'>'+dif+'</font></td> \n'
                if self.checkBox3.GetValue():
                    cadena+= '<td valign="top" align="right"><font size='+tama+'>'+precio+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")                
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        tama = '"0.2"'

        cadena = '</table><br>\n'
        if self.procesar:
            cadena+= 'TOTAL EN STOCK (sistema): '+str(totalStock)+'<br>'
        cadena+= 'TOTAL PRODUCTOS CONTADOS: '+str(totalProductos)+'<br>'
        if totalImporte < Decimal("0.00"):
            resultado = "(en contra)"
        else:
            resultado = "(a favor)"
        if self.procesar:
            if self.checkBox3.GetValue():
                cadena+= 'Total importe de las diferencias: $'+str(totalImporte)+" "+resultado
        f.write(cadena)
        f.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-InventariosMasivos.html")

    def buscarStock(self,ptc):
        sucursal = utiles.getSucursalActiva()
        sql = "SELECT stock FROM stock WHERE sucursal='"+sucursal+"' AND ptc='"+ptc+"' "
        resultados = consultasBD.ordenCruda(sql)
        if len(resultados)==0 or resultados==() or resultados==None:
            return 0
        return resultados[0][0]

    def buscarStockPTC(self):
        sucursal = utiles.getSucursalActiva()
        sql = "SELECT ptc,stock FROM stock WHERE sucursal='"+sucursal+"' AND stock<>'0'"
        resultados = consultasBD.ordenCrudaDict(sql)
        if len(resultados)==0 or resultados==() or resultados==None:
            return {}
        return resultados
    
    def buscarPrecio(self,codsussan):
        sql = "SELECT preciolt1 FROM productos WHERE codsussan='"+codsussan+"' "
        resultados = consultasBD.ordenCruda(sql)
        if len(resultados)==0 or resultados==() or resultados==None:
            return 0
        return resultados[0][0]

    def OnProcesar(self, event):
        self.procesar = True
        self.button4.Enable(False)
        self.button8.Enable(True)
        self.button5.Enable(True)
        self.checkBox2.Enable(True)
        self.checkBox3.Enable(True)
        self.checkBox4.Enable(True)
        self.staticText4.Enable(True)
        self.button7.Enable(True)
        diccionario = self.buscarStockPTC()
        stockPTC = {}
        for item in diccionario:
            stockPTC[item["ptc"]]=item["stock"]
        for fil in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fil,0)=="":
                continue
            #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant,Stock,Dif,Pesos
            #0   1         2           3     4     5         6    7     8   9
            ptc = self.grid1.GetCellValue(fil,0)
            #stock = self.buscarStock(ptc)
            try:
                stock = stockPTC[ptc]
            except:
                stock = 0
            cantidad = int(self.grid1.GetCellValue(fil,6))
            diferencia = cantidad - stock
            self.grid1.SetCellValue(fil,7,str(stock))
            self.grid1.SetCellAlignment(fil, 8, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellBackgroundColour(fil,7,GRIS)
            if diferencia!=0:
                self.grid1.SetCellValue(fil,8,str(diferencia))
                codsussan = self.grid1.GetCellValue(fil,1)
                precio = str(self.buscarPrecio(codsussan))
                precio = Decimal(precio).quantize(Decimal("0.10"))
                total = str(precio*diferencia)
                total = Decimal(total).quantize(Decimal("0.10"))
                self.grid1.SetCellValue(fil,9,str(total))
                if diferencia<0:
                    self.grid1.SetCellBackgroundColour(fil,8,ROJO)
                    self.grid1.SetCellBackgroundColour(fil,9,ROJO)
                else:
                    self.grid1.SetCellBackgroundColour(fil,8,VERDE)
                    self.grid1.SetCellBackgroundColour(fil,9,VERDE)
                self.grid1.SetCellAlignment(fil, 8, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                self.grid1.SetCellAlignment(fil, 9, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
                    
        self.ajustarAnchoColumnas()

    def OnActualizarSTOCK(self, event):
        print "Actualizando STOCK"
        self.button8.Enable(False)
        self.button7.Enable(False)
        self.checkBox4.Enable(False)
        self.staticText4.Enable(False)
        sucursal = utiles.getSucursalActiva()
        fecha = utiles.obtenerFecha("Y-m-d")
        fecha = fecha.replace("-","")
        nombreArchivo = "updateStock-"+fecha+".sql"
        try:
            f = open("c:\\matrisamor.doc\\"+nombreArchivo,"w")
            if self.checkBox4.GetValue():
                consultasBD.begin()
            for fil in xrange(self.grid1.GetNumberRows()):
                #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant,Stock,Dif
                #0   1         2           3     4     5         6    7     8
                if self.grid1.GetCellValue(fil,8) in ["","0"]:
                    continue
                ptc = self.grid1.GetCellValue(fil,0)
                cantidad = self.grid1.GetCellValue(fil,6)
                r1 = "UPDATE stock SET stock='"+cantidad+"' "
                r2 = "WHERE sucursal='"+sucursal+"' AND ptc='"+ptc+"'; \n"
                sql = r1+r2
                f.write(sql)
                if self.checkBox4.GetValue():
                    sincronizar_tabla.addChange(sql=sql)
                    consultasBD.executaSinCommit(None, sql)
            if self.checkBox4.GetValue():
                consultasBD.commit()
            f.close()
        except:
            utiles.mensaje(None,"Error al grabar")

        if self.checkBox4.GetValue():
            try:
                sincronizar_tabla.syncServerTables(self, ["stock"])
            except:
                utiles.mensaje(None,"Error durante la sincronizacion\nHagalo manualmente.")
        else:
            texto = "Debe utilizar el archivo "+nombreArchivo
            texto+= "\npara actualizar stock en sucursales.\n"
            texto+= "Recuerde que este procedimiento no sincroniza"
            utiles.mensaje(None,texto)

    def OnExportar(self, event):
        aux = utiles.obtenerFecha("Y-m-d h:m:s")
        fecha = aux[:4]+aux[5:7]+aux[8:10]+"-"+aux[11:13]+aux[14:16]+aux[-2:]
        sucursal = utiles.getSucursalActiva()
        archivo = "diferencias-"+sucursal+"-"+fecha+".txt"
        f = open("c:\\matrisamor.doc\\"+archivo,"w")
        totales = 0
        procesados = 0
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant,Stock,Dif,Pesos
        #0   1         2           3     4     5         6    7     8   9
        for fil in xrange(self.grid1.GetNumberRows()):
            totales+= 1
            if self.grid1.GetCellValue(fil,8) in ["","0"]:
                continue
            procesados+= 1
            ptc = self.grid1.GetCellValue(fil,0)
            f.write(ptc+"\n")
        f.close()
        texto = "Exportacion finalizada\n"+archivo
        texto+= "\nRegistros: "+str(totales)+" Exportados: "+str(procesados)
        utiles.mensaje(None,texto)
        return

    def OnCompararStock(self, event):
        sucursal = utiles.getSucursalActiva()
        myArchivo = self.textCtrl1.GetLabel()
        print "leyendo archivo"
        f = open(myArchivo,"r")
        lista = f.readlines()
        f.close()
        print "procesando salida"
        cadena = "SELECT p1.ptc,p3.codsussan,p3.descri,p2.talle,p2.color,p4.nombre,p1.stock \n"
        cadena+= "FROM \n"
        cadena+= "(SELECT ptc,stock FROM stock WHERE ptc NOT IN ("
        if self.checkBox1.GetValue():
            aux = lista[0].split("\r")
            salto = ""
            cantidad = 0
            for item in aux:
                if item=="":continue
                cantidad+= 1
                if cantidad>=20:
                    cantidad = 0
                    salto = "\n"
                cadena+= "'"+item+"'"+salto+","
                salto = ""
        else:
            salto = ""
            cantidad = 0
            for item in lista:
                if item=="":continue
                cantidad+= 1
                if cantidad>=20:
                    cantidad = 0
                    salto = "\n"
                cadena+= "'"+item+"'"+salto+","
                salto = ""
            
        cadena = cadena[:-1]
        cadena+= ") AND stock>0 AND sucursal='"+sucursal+"') AS p1,\n"
        cadena+= "producto_talle_color AS p2, productos AS p3, proveedor AS p4 \n"
        cadena+= "WHERE p1.ptc=p2.id AND p2.codsussan=p3.codsussan \n"
        cadena+= "      AND p3.proveedor=p4.idproveedor \n"
        cadena+= "ORDER BY p4.nombre "

        f = open("c:\\matrisamor.doc\\sentenciaSQL.txt","w")
        f.write(cadena)
        f.close()

        texto = "El archivo de salida SQL fue generado\n"
        texto+= "en c:\matrisamor.doc como sentenciaSQL.txt\n"
        texto+= "Copie y pegue la sentencia SQL en phpmyadmin"
        utiles.mensaje(None,texto)

    def OnLoQueNoSeConto(self, event):
        sucursal = utiles.getSucursalActiva()
        ptcContados = []
        for fil in xrange(self.grid1.GetNumberRows()):
            ptc = self.grid1.GetCellValue(fil,0)
            if ptc == "": continue
            ptcContados.append(ptc)
        ptcParaComparar = " ('"
        for ptc in ptcContados:
            ptcParaComparar+= ptc+"','"
        ptcParaComparar = ptcParaComparar[:-2]
        ptcParaComparar+= ") "
        
        r1 = "SELECT p8.ptc,p8.codsussan,p8.descri,p8.talle,p8.color,\n"
        r2 = "       p8.nombrecolor,p8.idproveedor,p8.nombre,p9.stock,p8.estacion,p8.anio,p8.preciolt1 \n"
        r3 = "FROM \n"
        r4 = " (SELECT p6.ptc,p6.codsussan,p6.descri,p6.talle,p6.color, \n"
        r5 = "         p7.nombre AS nombrecolor,p6.idproveedor,p6.nombre,p6.estacion,p6.anio,p6.preciolt1 \n"
        r6 = "  FROM \n"
        r7 = "   (SELECT p3.ptc,p3.codsussan,p4.descri,p3.talle,p3.color, \n"
        r8 = "           p5.idproveedor,p5.nombre,p4.estacion,p4.anio,p4.preciolt1 \n"
        r9 = "    FROM (SELECT p1.ptc,p2.codsussan,p2.talle,p2.color \n"
        r0 = "          FROM (SELECT ptc FROM stock WHERE sucursal='1' \n"
        rA = "                AND stock<>0 AND ptc NOT IN "+ptcParaComparar+") AS p1, \n"
        rB = "    producto_talle_color AS p2 \n"
        rC = "    WHERE p1.ptc=p2.id) AS p3, \n"
        rD = "  productos AS p4, proveedor AS p5 \n"
        rE = "  WHERE p3.codsussan=p4.codsussan AND p4.proveedor=p5.idproveedor) AS p6, \n"
        rF = "  colores AS p7 WHERE p6.color=p7.idcolor) AS p8, \n"
        rG = "  stock AS p9 \n"
        rH = "WHERE p8.ptc=p9.ptc AND p9.sucursal='1' ORDER BY nombre,codsussan,ptc "
        sql = r1+r2+r3+r4+r5+r6+r7+r8+r9+r0+rA+rB+rC+rD+rE+rF+rG+rH
        datos = consultasBD.ordenCrudaDict(sql)
        if datos==None or datos==() or len(datos)==0:
            utiles.mensaje(None,"No hay datos que imprimir")
            return
        
        print "Imprimir"
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant
        #0   1         2           3     4     5         6

        totalFilas = len(datos)

        f=open("c:\\matrisamor.doc\\reporte-InventariosMasivos2.html","w")
        f1=open("c:\\matrisamor.doc\\inventariosNoContado.sql","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 50
        totalPaginas = int(totalFilas) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()

            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="50%">'
            a+= 'SUSSAN BOUTIQUE<br>INVENTARIO - No contado en '+nombresuc 
            a+= '<br></td>\n'
            a+= '<td valign="center" align="right" width="50%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant
        #0   1         2           3     4     5         6
            a = '<hr>'

            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="0"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>PTC</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Cod.<br>Sussan</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Talle</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Color</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Proveedor</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Estacion/A&ntilde;o</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Cant.</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="9"><hr></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        renglon = 0
        totalProductos = 0
        totalImporte = Decimal("0.00")
        i = 0
        sucursal = utiles.getSucursalActiva()
        for item in datos:
        #PTC,CodSussan,Descripcion,Talle,Color,Proveedor,Cant
        #0   1         2           3     4     5         6   
            orden = str(i+1)
            ptc = item["ptc"]
            f1.write("UPDATE stock SET stock='0' WHERE ptc='"+ptc+"' AND sucursal='"+sucursal+"';\n")
            codsussan = item["codsussan"]
            descripcion = item["descri"][:30]
            talle = str(item["talle"])
            color = (str(item["nombrecolor"])+"/"+str(item["color"]))[:20]
            proveedor = (str(item["nombre"])+"/"+str(item["idproveedor"]))[:30]
            estacion = (str(str(item["estacion"])[:10]+"/"+str(item["anio"])))
            cantidad = str(item["stock"])
            importe = Decimal(str(item["preciolt1"]))
            subtotalProducto = int(cantidad)*importe
            totalImporte+= subtotalProducto
            totalProductos+= int(cantidad)
            
            tama = '"1"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+orden+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'><strong>'+ptc+'</strong></font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+codsussan+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+talle+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+color+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+proveedor+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+estacion+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+cantidad+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")                
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        tama = '"0.2"'

        totalImporte = totalImporte.quantize(Decimal("0.00"))
        cadena = '</table><br>\n'
        cadena+= 'TOTAL PRODUCTOS: '+str(totalProductos)+'<br>'
        cadena+= 'TOTAL IMPORTE: '+str(totalImporte)
        f.write(cadena)
        f.close()
        f1.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-InventariosMasivos2.html")

        texto = "En c:\\matrisamor.doc\\inventariosNoContado.sql\n"
        texto+= "estan los update para corregir el stock."
        utiles.mensaje(None,texto)
